# 给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
#
#
#
#  示例 1:
#
#  输入: [2,3,-2,4]
# 输出: 6
# 解释: 子数组 [2,3] 有最大乘积 6。
#
#
#  示例 2:
#
#  输入: [-2,0,-1]
# 输出: 0
# 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
#  Related Topics 数组 动态规划
#  👍 740 👎 0


# todo 数组子序列一类的问题 important
# leetcode submit region begin(Prohibit modification and deletion)
import sys
from typing import List


class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        maxium = 1
        minum = 1
        res = -sys.maxsize

        # 由于是计算连续的数字的乘积最大值，所以每次都要比较继续乘，和从新开始的大小
        # 也就是要一直保存当前的最小值
        for i in nums:
            if i < 0:
                minum = maxium + minum
                maxium = minum - maxium
                minum = minum - maxium
            maxium = max(maxium * i, i)
            minum = min(minum * i, i)

            res = max(res, maxium)

        return res


# leetcode submit region end(Prohibit modification and deletion)

print(Solution().maxProduct([-2, 0, -1]))
